"""
SimpleAPI ORM 简单测试

验证 ORM 包的基础功能是否正常工作。
"""

import asyncio
from simpleapi.orm import (
    BaseModel, CharField, IntField, BooleanField,
    database, DatabaseConfig
)


class User(BaseModel):
    """简单的用户模型"""
    username = CharField(max_length=50, unique=True)
    email = CharField(max_length=100)
    age = IntField(null=True)
    is_active = BooleanField(default=True)
    
    class Meta:
        table = "test_users"


async def test_basic_operations():
    """测试基础操作"""
    print("🧪 开始测试 SimpleAPI ORM...")
    
    try:
        # 1. 连接数据库
        print("\n1️⃣ 连接数据库...")
        await database.connect(
            url=DatabaseConfig.sqlite("orm_test.db"),
            generate_schemas=True
        )
        print("✅ 数据库连接成功")
        
        # 2. 清空测试数据
        print("\n2️⃣ 清空测试数据...")
        await User.truncate_table()
        print("✅ 测试数据清空完成")
        
        # 3. 创建用户
        print("\n3️⃣ 创建用户...")
        user = await User.create_record(
            username="test_user",
            email="test@example.com",
            age=25
        )
        print(f"✅ 创建用户成功: {user}")
        
        # 4. 查询用户
        print("\n4️⃣ 查询用户...")
        found_user = await User.get_record(username="test_user")
        print(f"✅ 查询用户成功: {found_user}")
        
        # 5. 更新用户
        print("\n5️⃣ 更新用户...")
        updated_count = await User.update_records(
            filter_kwargs={"username": "test_user"},
            age=26
        )
        print(f"✅ 更新用户成功: 更新了 {updated_count} 条记录")
        
        # 6. 列表查询
        print("\n6️⃣ 列表查询...")
        users = await User.list_records(limit=10)
        print(f"✅ 列表查询成功: 找到 {len(users)} 个用户")
        
        # 7. 统计查询
        print("\n7️⃣ 统计查询...")
        count = await User.count_records()
        exists = await User.exists_record(username="test_user")
        print(f"✅ 统计查询成功: 总数={count}, 存在={exists}")
        
        # 8. 查询构建器
        print("\n8️⃣ 查询构建器...")
        adult_users = await (User.query_builder()
                           .filter(age__gte=18)
                           .order_by("-age")
                           .all())
        print(f"✅ 查询构建器成功: 找到 {len(adult_users)} 个成年用户")
        
        # 9. 数据序列化
        print("\n9️⃣ 数据序列化...")
        user_data = user.to_dict()
        print(f"✅ 数据序列化成功: {len(user_data)} 个字段")
        
        # 10. 批量创建
        print("\n🔟 批量创建...")
        batch_data = [
            {"username": f"batch_user_{i}", "email": f"batch{i}@example.com", "age": 20 + i}
            for i in range(1, 4)
        ]
        batch_users = await User.bulk_create_records(batch_data)
        print(f"✅ 批量创建成功: 创建了 {len(batch_users)} 个用户")
        
        print("\n🎉 所有测试通过！ORM 包工作正常！")
        return True
        
    except Exception as e:
        print(f"❌ 测试失败: {e}")
        import traceback
        traceback.print_exc()
        return False
        
    finally:
        # 关闭数据库连接
        await database.disconnect()
        print("✅ 数据库连接已关闭")


if __name__ == "__main__":
    success = asyncio.run(test_basic_operations())
    if success:
        print("\n🏆 SimpleAPI ORM 测试完成，所有功能正常！")
    else:
        print("\n💥 SimpleAPI ORM 测试失败，请检查错误信息！") 